/**
 * 给定N堆石子，
 * red每次拿走一堆，先手
 * purple每次各拿走一个
 * 无法走者失败，问谁获胜
 * 
 * 整个游戏的最大轮数显然是最大堆的数量
 * 且purple是没有策略的，因此原问题等价于先手是否能在最大轮数范围内删除所有石子
 * 然后可以据此推算
 * 
 * 打了一个表，发现先手失败规律，当且仅当：
 * 如果最大值是2，至少要有3个
 *     最大值是3，至少要有4个
 *     ... 
 *     最大值是N-1，至少要有N个
 */
#include <bits/stdc++.h>
using namespace std;

using llt = long long;
using vi = vector<int>;

int N;
vi A;

bool f(const vi & A){
    int N = A.size();
    if(1 == N) return true;
    for(auto i : A)if(i >= N) return true;

    map<int, int> Map;
    for(auto i : A) Map[i] += 1;
    
    int last = Map.rbegin()->first;
    int cnt = Map.rbegin()->second;
    return last + 1 <= cnt ? false : true;
}

void work(){
    cin >> N;
    A.assign(N, {});
    for(auto & i : A) cin >> i;

    cout << (f(A) ? "red" : "purple") << "\n";
    return;
}

// int Z[] = {1, 2, 3, 4, 5, 6, 7};
// int M = 7;
// vi Pai;

// int dfsRed();
// int dfsPurple(){
//     if(Pai.empty()) return 0;
//     vi pos;

//     for(int i=0;i<Pai.size();++i){
//         assert(Pai[i] > 0);
//         if(--Pai[i]==0)pos.emplace_back(i);
//     }

//     for(auto it=pos.rbegin();it!=pos.rend();++it){
//         Pai.erase(Pai.begin() + *it);
//     }
    
//     auto b = dfsRed();
//     for(auto p : pos){
//         Pai.insert(Pai.begin() + p, 0);
//     }
//     for(auto & i : Pai) i += 1;
//     return b ? 0 : 1;
// }

// int dfsRed(){
//     int n = Pai.size();
//     // int z = 0;
//     for(int i=0;i<n;++i){
//         // if(0 == Pai[i]) continue;
//         // ++z;
//         // 删除i
//         int tmp = Pai[i];
//         Pai.erase(Pai.begin() + i);
//         auto b = dfsPurple();
//         Pai.insert(Pai.begin() + i, tmp);
//         if(0 == b) return 1;
//     }
//     return 0;
// }

// void proc(){

//     bool b = dfsRed();
//     if(b){
//         // for(auto i : Pai) cout << i << " ";
//         // cout << " : RED" << endl;
//     }else{
//         for(auto i : Pai) cout << i << " ";
//         cout << " : Purple" << endl;
//         cout << f(Pai) << endl;
//     }
//     // cout << endl;
// }

// void dfs(int depth){
//     if(0 == depth){
//         proc();
//         return;
//     }
//     for(int i=(Pai.empty()?1:Pai.back());i<=20;++i){
//        Pai.push_back(i);
//        dfs(depth - 1);
//        Pai.pop_back();       
//     }
//     return;
// }

// void init(){
//     for(int depth=1;depth<=10;++depth){
//         dfs(depth);
//     }
// }

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);	

    // init();   

    int nofkase = 1;
    cin >> nofkase;
    while(nofkase--) work();
	return 0;
}